package ar.edu.utn.frsf.tpae.a2012.g05.controller;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;

import ar.edu.utn.frsf.tpae.a2012.g05.entity.Cliente;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Cuenta;
import ar.edu.utn.frsf.tpae.a2012.g05.entity.Pago;
import ar.edu.utn.frsf.tpae.a2012.g05.exception.NegocioException;
import ar.edu.utn.frsf.tpae.a2012.g05.facade.HomeBankingFacade;
import ar.edu.utn.frsf.tpae.a2012.g05.util.ServiceLocator;

public class PagoBean implements Serializable {

	private static final long serialVersionUID = -2979756947473150568L;

	private Cliente cliente;
	private Integer idCuenta;
	private Pago pago;
	
	private Map<String, Integer> listaCuentas = new HashMap<String, Integer>();

	private String mensaje;
	
	@PostConstruct
	public void init() {
		pago = new Pago();
		cliente = (Cliente) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("cliente");
		listar();
	}

	public String guardar() {
		HomeBankingFacade service = ServiceLocator.getHomeBankingFacade();
		if (idCuenta.equals(-1)) {
			mensaje = "Debe seleccionar una cuenta";
			return null;
		}
		pago.setCuenta(service.findCuentaById(idCuenta));
		pago.setFecha(new Date());
		try {
			service.realizarPago(pago);
			pago = new Pago();
			return "toMenu";
		} catch (Exception e) {
			mensaje = e.getMessage();
		}
		return null;
	}
	
	public void listar() {
		HomeBankingFacade service = ServiceLocator.getHomeBankingFacade();
		try {
			List<Cuenta> cuentas =  service.findCuentasCliente(cliente);
			for (Cuenta c : cuentas) {
				listaCuentas.put(c.getNumero().toString(), c.getId());
			}
		} catch (NegocioException e) {
			e.printStackTrace();
		}
	}
	
	// Getters y setters, utilizados por las JSP.	

	public Integer getIdCuenta() {
		return idCuenta;
	}

	public void setIdCuenta(Integer idCuenta) {
		this.idCuenta = idCuenta;
	}

	public Pago getPago() {
		return pago;
	}

	public void setPago(Pago pago) {
		this.pago = pago;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public Map<String, Integer> getListaCuentas() {
		return listaCuentas;
	}

	public void setListaCuentas(Map<String, Integer> listaCuentas) {
		this.listaCuentas = listaCuentas;
	}

	
}
